package com.zs.propertymanage.mapper;

import com.zs.propertymanage.dataObj.GeneralExtra;
import com.zs.propertymanage.dataObj.entity.House;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface HouseMapper {

    /**
     * 根据组织id列表获取房屋列表
     *
     * @param search    搜索参数
     * @param start     开始条目数
     * @param pageSize  每页显示的条数
     * @param orgIdList 要查询的组织id列表
     * @return 查询到的房屋列表
     */
    List<House> getHouseByOrgIdList(String search, Integer start, Integer pageSize, List<Integer> orgIdList, Boolean needPage);

    /**
     * 根据组织id列表获取房屋列表数量
     *
     * @param search    搜索参数
     * @param orgIdList 要查询的组织id列表
     * @return 查询到的房屋列表
     */
    Integer getHouseCountByOrgIdList(String search, List<Integer> orgIdList);

    /**
     * 添加房屋信息
     *
     * @param house 房屋信息
     */
    Integer addHouse(House house);

    /**
     * 更新房屋信息
     *
     * @param house 房屋信息
     * @return 更新状态（成功或失败）
     */
    Integer updateHouse(House house);

    /**
     * 删除房屋信息
     *
     * @param id 房屋ID
     * @return 删除状态（成功或失败）
     */
    Integer deleteHouse(Integer id);

    /**
     * 获取所有房屋类型列表
     *
     * @return 所有房屋类型列表
     */
    List<GeneralExtra> getAllHouseType();

    /**
     * 获取所有房屋状态列表
     *
     * @return 所有房屋状态列表
     */
    List<GeneralExtra> getAllHouseStatus();

    /**
     * 添加房屋类型信息
     *
     * @param typeName 房屋类型名称
     * @return 添加的房屋类型ID
     */
    Integer addHouseType(String typeName);

    /**
     * 删除房屋类型信息
     *
     * @param typeId 房屋类型ID
     * @return 删除状态（成功或失败）
     */
    Integer deleteHouseType(Integer typeId);

    /**
     * 添加房屋状态信息
     *
     * @param statusName 房屋状态名称
     * @return 添加的房屋状态ID
     */
    Integer addHouseStatus(String statusName);

    /**
     * 删除房屋状态信息
     *
     * @param statusId 房屋状态ID
     * @return 删除状态（成功或失败）
     */
    Integer deleteHouseStatus(Integer statusId);

    /**
     * 根据房屋ID获取房屋信息
     *
     * @param houseId 房屋ID
     * @return 房屋信息
     */
    House getHouseById(Integer houseId);     // 不一定有用，记得删

    /**
     * 获取租户对应的房屋数量
     *
     * @param tenantId 租户ID
     * @return 租户对应的房屋数量
     */
    Integer getCountOfTenant(String tenantId);

    /**
     * 根据租户ID和房屋类型ID获取租户对应的房屋数量
     *
     * @param tenantId 租户ID
     * @param typeId   房屋类型ID
     * @return 租户对应的房屋数量
     */
    Integer getCountOfTenantByType(String tenantId, Integer typeId);

    /**
     * 根据租户ID和房屋状态ID获取租户对应的房屋数量
     *
     * @param tenantId 租户ID
     * @param statusId 房屋状态ID
     * @return 租户对应的房屋数量
     */
    Integer getCountOfTenantByStatus(String tenantId, Integer statusId);

    /**
     * 根据租户ID获取租户对应的房屋列表（搜索关键字，起始位置，每页数量）
     *
     * @param tenantId 租户ID
     * @param search   搜索关键字
     * @param start    起始位置
     * @param pageSize 每页数量
     * @return 租户对应的房屋列表
     */
    List<House> getHouseByTenantId(String tenantId, String search, Integer start, Integer pageSize);

    /**
     * 根据租户ID获取租户对应的房屋数量
     *
     * @param tenantId 租户ID
     * @param search   搜索关键字
     * @return 租户对应的房屋数量
     */
    Integer getHouseCountByTenantId(String tenantId, String search);

    /**
     * 获取可租赁的房屋列表（搜索关键字，起始位置，每页数量）
     *
     * @param search   搜索关键字
     * @param start    起始位置
     * @param pageSize 每页数量
     * @return 可租赁的房屋列表
     */
    List<House> getRentableHouse(String search, Integer start, Integer pageSize);

    /**
     * 获取可租赁的房屋数量
     *
     * @param search 搜索关键字
     * @return 可租赁的房屋数量
     */
    Integer getCountOfRentableHouse(String search);

    /**
     * 租赁房屋
     *
     * @param tenantId 租户ID
     * @param houseId  房屋ID
     * @return 租赁状态（成功或失败）
     */
    Integer rentHouse(String tenantId, String houseId);

    /**
     * 停止租赁房屋
     *
     * @param houseId 房屋ID
     * @return 停止租赁状态（成功或失败）
     */
    Integer stopRent(String houseId);

    /**
     * 更新房屋状态
     *
     * @param houseId  房屋ID
     * @param statusId 房屋状态ID
     * @return 更新状态（成功或失败）
     */
    Integer updateHouseStatus(String houseId, Integer statusId);

    /**
     * 获取某个租户所有的房屋列表
     *
     * @param tenantId 租户ID
     * @return 某个租户所有的房屋列表
     */
    List<House> getAllHouseByTenantId(String tenantId);

    Integer getTotal();
}
